package basic_syntax;

public class CharAndStringDemo {
    public void charExample() {

        System.out.println("Java在内存中总是使用Unicode表示字符，一个英文字符和一个中文字符都用一个char类型表示，它们都占用两个字节");

        char letter = 'A';  // 定义一个字符
        char symbol = '@';  // 定义一个字符
        System.out.println("Character: " + letter);  // 输出字符
        System.out.println("Character: " + symbol);  // 输出字符


        System.out.println("还可以直接用转义字符[\\\\u]+Unicode编码来表示一个字符：注意是十六进制");
        char c3 = '\u0041'; // 'A'，因为十六进制0041 = 十进制65
        char c4 = '\u4e2d'; // '中'，因为十六进制4e2d = 十进制20013

        // 要显示一个字符的Unicode编码，只需将char类型直接赋值给int类型即可：
        int n1 = 'A'; // 65
        int n2 = '中'; // 20013

        System.out.println("Character: " + c3);  // 输出字符
        System.out.println("Character: " + c4);  // 输出字符

        System.out.println(n1);
        System.out.println(n2);
    }

    public static void stringExample() {

        System.out.println("基本类型char可以保存一个2字节的Unicode字符，而字符串则是一系列字符的序列（在C中就是一个字符数组）" +
                "Java中没有字符串这种基本类型，因此只能使用类来进行定义。" +
                "注意，字符串中的字符一旦确定，无法进行修改，只能重新创建");

        String name = "Alice";
        String greeting = new String("hello world");


        System.out.println("名字: " + name);
        System.out.println("greeting: " + greeting);


        String upperGreeting = greeting.toUpperCase();  // 转为大写
        System.out.println("转为大写: " + upperGreeting);  // 输出大写字符串


        int length = greeting.length();  // 获取字符串长度
        System.out.println("greeting长度: " + length);  // 输出字符串长度

        // 字符串连接
        String s = name + " " + greeting + "!";
        System.out.println(s);


        System.out.println("如果用+连接字符串和其他数据类型，会将其他数据类型先自动转型为字符串，再连接");
        int age = 25;
        String s4 = "age is " + age;
        System.out.println(s4); // age is 25


        System.out.println("字符串不可变，变得是引用的指向");
        String static_s = "hello";
        String t = static_s;
        static_s = "world";
        System.out.println(t);

        // 和包装类一样
        String str1 = "Hello World";
        String str2 = "Hello World";
        System.out.println(str1 == str2);

        String str21 = new String("Hello World");
        String str22 = new String("Hello World");
        System.out.println(str21 == str22);     // 使用构造方法主动创建两个新的对象，那么就是不同的对象了
        System.out.println(str21.equals(str22));   //字符串的内容比较，一定要用equals

        // 注意，字符串中的字符一旦确定，无法进行修改，只能重新创建====>引入Builder

        StringBuilder builder = new StringBuilder();   //一开始创建时，内部什么都没有
        builder.append("AAA");   //我们可以使用append方法来讲字符串拼接到后面
        builder.append("BBB");
        System.out.println(builder.toString());   //当我们字符串编辑完成之后，就可以使用toString转换为字符串了

        builder.delete(2, 4);   //删除2到4这个范围内的字符
        System.out.println(builder.toString());




    }

}
